#ifndef _E_API_ENUM_H_
#define _E_API_ENUM_H_

enum E_api_Bind_Flag
{
	E_api_Bind_Vertex_Buffer									= 1L,
	E_api_Bind_Index_Buffer										= 2L,
	E_api_Bind_Constant_Buffer									= 4L,
	E_api_Bind_Shader_Resource									= 8L,
	E_api_Bind_Stream_Output									= 16L,
	E_api_Bind_Render_Target									= 32L,
	E_api_Bind_Depth_Stencil									= 64L,
	E_api_Bind_Unordered_Access								= 128L,
};

enum E_api_Usage
{
	E_api_Usage_Default,
	E_api_Usage_Immutable,
	E_api_Usage_Dynamic,
	E_api_Usage_Staging,
};

enum E_api_Cpu_Access_Flag
{
	E_api_Cpu_Access_Write										= 1L,
	E_api_Cpu_Access_Read										= 2L,
};

enum E_api_Resource_Misc_Flag
{
	E_api_Resource_Misc_Generate_Mips							= 1L,
	E_api_Resource_Misc_Shared									= 2L,
	E_api_Resource_Misc_TextureCube								= 4L,
	E_api_Resource_Misc_Shared_KeyedMutex						= 8L,
	E_api_Resource_Misc_GDI_Compatible							= 16L,
};

enum E_api_Map
{
	E_api_Map_Read,
	E_api_Map_Write,
	E_api_Map_Read_Write,
	E_api_Map_Write_Discard,
	E_api_Map_Write_No_Overwrite,
	E_api_Map_Lock,
};

enum E_api_Map_Flag
{
	E_api_Map_Flag_Do_Not_Wait,
};


enum E_api_Include_Type
{
	E_api_Include_Local,
	E_api_Include_System,
	E_api_Include_Force_32bit,
};

enum E_api_Format
{
	E_api_Format_unknown = 0,
	E_api_Format_r32g32b32a32_typeless = 1,
	E_api_Format_r32g32b32a32_float = 2,
	E_api_Format_r32g32b32a32_uint = 3,
	E_api_Format_r32g32b32a32_sint = 4,
	E_api_Format_r32g32b32_typeless = 5,
	E_api_Format_r32g32b32_float = 6,
	E_api_Format_r32g32b32_uint = 7,
	E_api_Format_r32g32b32_sint = 8,
	E_api_Format_r16g16b16a16_typeless = 9,
	E_api_Format_r16g16b16a16_float = 10,
	E_api_Format_r16g16b16a16_unorm = 11,
	E_api_Format_r16g16b16a16_uint = 12,
	E_api_Format_r16g16b16a16_snorm = 13,
	E_api_Format_r16g16b16a16_sint = 14,
	E_api_Format_r32g32_typeless = 15,
	E_api_Format_r32g32_float = 16,
	E_api_Format_r32g32_uint = 17,
	E_api_Format_r32g32_sint = 18,
	E_api_Format_r32g8x24_typeless = 19,
	E_api_Format_d32_float_s8x24_uint = 20,
	E_api_Format_r32_float_x8x24_typeless = 21,
	E_api_Format_x32_typeless_g8x24_uint = 22,
	E_api_Format_r10g10b10a2_typeless = 23,
	E_api_Format_r10g10b10a2_unorm = 24,
	E_api_Format_r10g10b10a2_uint = 25,
	E_api_Format_r11g11b10_float = 26,
	E_api_Format_r8g8b8a8_typeless = 27,
	E_api_Format_r8g8b8a8_unorm = 28,
	E_api_Format_r8g8b8a8_unorm_srgb = 29,
	E_api_Format_r8g8b8a8_uint = 30,
	E_api_Format_r8g8b8a8_snorm = 31,
	E_api_Format_r8g8b8a8_sint = 32,
	E_api_Format_r16g16_typeless = 33,
	E_api_Format_r16g16_float = 34,
	E_api_Format_r16g16_unorm = 35,
	E_api_Format_r16g16_uint = 36,
	E_api_Format_r16g16_snorm = 37,
	E_api_Format_r16g16_sint = 38,
	E_api_Format_r32_typeless = 39,
	E_api_Format_d32_float = 40,
	E_api_Format_r32_float = 41,
	E_api_Format_r32_uint = 42,
	E_api_Format_r32_sint = 43,
	E_api_Format_r24g8_typeless = 44,
	E_api_Format_d24_unorm_s8_uint = 45,
	E_api_Format_r24_unorm_x8_typeless = 46,
	E_api_Format_x24_typeless_g8_uint = 47,
	E_api_Format_r8g8_typeless = 48,
	E_api_Format_r8g8_unorm = 49,
	E_api_Format_r8g8_uint = 50,
	E_api_Format_r8g8_snorm = 51,
	E_api_Format_r8g8_sint = 52,
	E_api_Format_r16_typeless = 53,
	E_api_Format_r16_float = 54,
	E_api_Format_d16_unorm = 55,
	E_api_Format_r16_unorm = 56,
	E_api_Format_r16_uint = 57,
	E_api_Format_r16_snorm = 58,
	E_api_Format_r16_sint = 59,
	E_api_Format_r8_typeless = 60,
	E_api_Format_r8_unorm = 61,
	E_api_Format_r8_uint = 62,
	E_api_Format_r8_snorm = 63,
	E_api_Format_r8_sint = 64,
	E_api_Format_a8_unorm = 65,
	E_api_Format_r1_unorm = 66,
	E_api_Format_r9g9b9e5_sharedexp = 67,
	E_api_Format_r8g8_b8g8_unorm = 68,
	E_api_Format_g8r8_g8b8_unorm = 69,
	E_api_Format_bc1_typeless = 70,
	E_api_Format_bc1_unorm = 71,
	E_api_Format_bc1_unorm_srgb = 72,
	E_api_Format_bc2_typeless = 73,
	E_api_Format_bc2_unorm = 74,
	E_api_Format_bc2_unorm_srgb = 75,
	E_api_Format_bc3_typeless = 76,
	E_api_Format_bc3_unorm = 77,
	E_api_Format_bc3_unorm_srgb = 78,
	E_api_Format_bc4_typeless = 79,
	E_api_Format_bc4_unorm = 80,
	E_api_Format_bc4_snorm = 81,
	E_api_Format_bc5_typeless = 82,
	E_api_Format_bc5_unorm = 83,
	E_api_Format_bc5_snorm = 84,
	E_api_Format_b5g6r5_unorm = 85,
	E_api_Format_b5g5r5a1_unorm = 86,
	E_api_Format_b8g8r8a8_unorm = 87,
	E_api_Format_b8g8r8x8_unorm = 88,
	E_api_Format_r10g10b10_xr_bias_a2_unorm = 89,
	E_api_Format_b8g8r8a8_typeless = 90,
	E_api_Format_b8g8r8a8_unorm_srgb = 91,
	E_api_Format_b8g8r8x8_typeless = 92,
	E_api_Format_b8g8r8x8_unorm_srgb = 93,
	E_api_Format_bc6h_typeless = 94,
	E_api_Format_bc6h_uf16 = 95,
	E_api_Format_bc6h_sf16 = 96,
	E_api_Format_bc7_typeless = 97,
	E_api_Format_bc7_unorm = 98,
	E_api_Format_bc7_unorm_srgb = 99,
	E_api_Format_d24_unorm = 100, // gl no stencil formats
	E_api_Format_d32_unorm = 101, // gl no stencil formats
	E_api_Format_force_uint = 0xfffffffful,
};

enum E_api_Input_Classification
{
	E_api_Input_Per_Vertex_Data = 0,
	E_api_Input_Per_Instance_Data = 1,
};

enum E_api_Primitive_Topology
{
	E_api_Primitive_Topology_Undefined = 0,
	E_api_Primitive_Topology_Pointlist = 1,
	E_api_Primitive_Topology_Linelist = 2,
	E_api_Primitive_Topology_Linestrip = 3,
	E_api_Primitive_Topology_Trianglelist = 4,
	E_api_Primitive_Topology_Trianglestrip = 5,
	E_api_Primitive_Topology_Linelist_adj = 10,
	E_api_Primitive_Topology_Linestrip_adj = 11,
	E_api_Primitive_Topology_Trianglelist_adj = 12,
	E_api_Primitive_Topology_Trianglestrip_adj = 13,
};

enum E_api_Resource_Dimension
{
	E_api_Resource_Dimension_Unknown = 0,
	E_api_Resource_Dimension_Buffer = 1,
	E_api_Resource_Dimension_Texture1d = 2,
	E_api_Resource_Dimension_Texture2d = 3,
	E_api_Resource_Dimension_Texture3d = 4,
};

enum  E_api_RTV_Dimension
{
	E_api_RTV_Dimension_Unknown = 0,
	E_api_RTV_Dimension_Buffer = 1,
	E_api_RTV_Dimension_Texture1d = 2,
	E_api_RTV_Dimension_Texture1dArray = 3,
	E_api_RTV_Dimension_Texture2d = 4,
	E_api_RTV_Dimension_Texture2dArray = 5,
	E_api_RTV_Dimension_Texture2dms = 6,
	E_api_RTV_Dimension_Texture2dmsArray = 7,
	E_api_RTV_Dimension_Texture3d = 8,
};

enum E_api_DSV_Dimension
{
	E_api_DSV_Dimension_Unknown = 0,
	E_api_DSV_Dimension_Texture1d = 1,
	E_api_DSV_Dimension_Texture1dArray = 2,
	E_api_DSV_Dimension_Texture2d = 3,
	E_api_DSV_Dimension_Texture2dArray = 4,
	E_api_DSV_Dimension_Texture2dms = 5,
	E_api_DSV_Dimension_Texture2dmsArray = 6,
};

enum E_api_SRV_Dimension
{
	E_api_SRV_Dimension_Unknown = 0,
	E_api_SRV_Dimension_Buffer = 1,
	E_api_SRV_Dimension_Texture1d = 2,
	E_api_SRV_Dimension_Texture1dArray = 3,
	E_api_SRV_Dimension_Texture2d = 4,
	E_api_SRV_Dimension_Texture2dArray = 5,
	E_api_SRV_Dimension_Texture2dms = 6,
	E_api_SRV_Dimension_Texture2dmsArray = 7,
	E_api_SRV_Dimension_Texture3d = 8,
	E_api_SRV_Dimension_Texturecube = 9,
};

enum E_api_Fill_Mode
{
	E_api_Fill_Wireframe,
	E_api_Fill_Solid,
};

enum E_api_Cull_Mode
{
	E_api_Cull_None,
	E_api_Cull_Front,
	E_api_Cull_Back,
};

enum E_api_Clear_Flags
{
	E_api_Clear_Color = 0x1L,
	E_api_Clear_Depth = 0x2L,
	E_api_Clear_Stencil = 0x4L,
};

enum E_api_Depth_Write_Mask
{
	E_api_Depth_Write_Mask_Zero = 0,
	E_api_Depth_Write_Mask_All = 1,
};

enum E_api_Comparison_Func
{
	E_api_Comparison_Never = 1,
	E_api_Comparison_Less = 2,
	E_api_Comparison_Equal = 3,
	E_api_Comparison_Less_Equal = 4,
	E_api_Comparison_Greater = 5,
	E_api_Comparison_Not_Equal = 6,
	E_api_Comparison_Greater_Equal = 7,
	E_api_Comparison_Always = 8,
};

enum E_api_Stencil_Op
{
	E_api_Stencil_Op_Keep = 1,
	E_api_Stencil_Op_Zero = 2,
	E_api_Stencil_Op_Replace = 3,
	E_api_Stencil_Op_Incr_Sat = 4,
	E_api_Stencil_Op_Decr_Sat = 5,
	E_api_Stencil_Op_Invert = 6,
	E_api_Stencil_Op_Incr = 7,
	E_api_Stencil_Op_Decr = 8,
};

enum E_api_Program_Variable
{
	E_api_Program_Variable_ModelView = 0x1000,
	E_api_Program_Variable_Projection = 0x1001,
};

#endif